package org.visionlibrary.image.geomtric.lines.trim;

import java.util.ArrayList;
import java.util.List;

import org.visionlibrary.image.geomtric.lines.Lines;
import org.visionlibrary.image.geomtric.lines.trim.model.AbstractSegmentTrimmer;
import org.visionlibrary.image.geomtric.model.Vector2d;


/**
 * Klasa pozwala na przefiltrowanie zbioru odcinkow wzgledem ich dlugosci.
 * 
 */
public class SegmentLengthTrimmer extends AbstractSegmentTrimmer {
	// minimalna dlugosc odcinka, wszystkie krotsze beda odrzucane
	private double minimalLength = 10;
	
	/**
	 * Konstruktor ktorego parametrem jest minimalna mozliwa dlugosc jaka
	 * moze miec odcinek.
	 * 
	 * @param minialLength Dlugosc minimalna.
	 */
	public SegmentLengthTrimmer(double minialLength) {
		super();
		this.minimalLength = minialLength;
	}

	@Override
	public List<Vector2d> trimSegments(List<Vector2d> segments) {
		if (null == segments)
			throw new NullPointerException("Segments is null.");
		if (segments.isEmpty())
			return Lines.copy(segments);
		
		List<Vector2d> result = new ArrayList<Vector2d>();
		for(Vector2d segment : segments) {
			double tmpLength = segment.length();
			if(tmpLength >= minimalLength)
				result.add(segment);
		}
		
		return result;
	}

	/**
	 * Metoda pozwala na pobranie minimalnej mozliwej dlugosci odcinka.
	 * 
	 * @return Dlugosc odcinka.
	 */
	public double getMinimalLength() {
		return minimalLength;
	}

	/**
	 * Metoda pozwala na ustawienie minimalnej mozliwej dlugosci odcinka.
	 * 
	 * @return Dlugosc odcinka.
	 */
	public void setMinimalLength(double minimalLength) {
		this.minimalLength = minimalLength;
	}
}
